﻿let f0 (seq: int seq) = [|for x in seq do x|]
let f00 (seq: int seq) = [|for x in seq do yield x|]
let f000 (seq: int seq) = [|for x in seq do let x = x in yield x|]
let f0000 (seq: int seq) = [|for x in seq do let x = x in x|]
let f00000 (seq: int seq) x y = [|for z in seq do let foo = z + x in let bar = z + y in yield z + foo + bar|]
let f000000 (seq: int seq) x y = [|for z in seq do let foo = z + x in let bar = z + y in z + foo + bar|]
let f0000000 (seq: int seq) f x y = [|for z in seq do f (); let foo = z + x in let bar = z + y in z + foo + bar|]
let f00000000 (seq: int seq) f x y = [|for z in seq do let foo = z + x in f (); let bar = z + y in z + foo + bar|]
let f000000000 (seq: int seq) f x y = [|for z in seq do let foo = z + x in let bar = z + y in f (); z + foo + bar|]
let f0000000000 (seq: int seq) (f : unit -> int) x y = [|for z in seq do let foo = z + x in let bar = z + y in f (); z + foo + bar|]

let f1 (seq: int seq) = [|for x in seq -> x|]
let f2 f (seq: int seq) = [|for x in seq -> f x|]
let f3 f (seq: int seq) = [|for x in seq -> f (); x|]
let f4 f g (seq: int seq) = [|for x in seq -> f (); g(); x|]
let f5 (seq: int seq) = [|for x in seq do yield x|]
let f6 f (seq: int seq) = [|for x in seq do f (); yield x|]
let f7 f g (seq: int seq) = [|for x in seq do f (); g (); yield x|]

let f8 f g (seq: int seq) = [|let y = f () in let z = g () in for x in seq -> x + y + z|]
let f9 f g (seq: int seq) = [|let y = f () in g (); for x in seq -> x + y|]
let f10 f g (seq: int seq) = [|f (); g (); for x in seq -> x|]
let f11 f g (seq: int seq) = [|f (); let y = g () in for x in seq -> x + y|]
